package com.pacs.config;

import java.io.UnsupportedEncodingException;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.jfinal.plugin.redis.serializer.ISerializer;

public class JsonSerializer implements ISerializer {

	@Override
	public byte[] keyToBytes(String key) {
		return this.str2Byte(key);
	}

	@Override
	public String keyFromBytes(byte[] bytes) {
		if(bytes == null || bytes.length == 0){
			return null;		
		}
		
		return this.byte2Str(bytes);
	}

	@Override
	public byte[] fieldToBytes(Object field) {
		String json = JSON.toJSONString(field);
		return this.str2Byte(json);
	}

	@Override
	public Object fieldFromBytes(byte[] bytes) {
		if(bytes == null || bytes.length == 0){
			return null;		
		}
		
		String json = this.byte2Str(bytes);
		return JSON.parseObject(json);
	}

	@Override
	public byte[] valueToBytes(Object value) {
		String json = JSON.toJSONString(value, SerializerFeature.WriteClassName);
		return this.str2Byte(json);
	}

	@Override
	public Object valueFromBytes(byte[] bytes) {
		if(bytes == null || bytes.length == 0){
			return null;		
		}
		
		String json = this.byte2Str(bytes);
		return JSON.parse(json);
	}
	
	private String byte2Str(byte[] bytes){
		try {
			return new String(bytes, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return null;		
	}
	
	private byte[] str2Byte(String str){
		try {
			return str.getBytes("UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return null;	
	}
}